package br.com.simtecnologia.access.controll.role;

import java.util.Collection;

import br.com.caelum.vraptor.resource.ResourceMethod;

/**
 * Verifica o acesso a uma lógica através de anotações @{@link Roles}
 * @author Tomaz Lavieri
 * @see Roles
 */
public interface RoleResolver {
	/**
	 * Verifica se a <tt>logic</tt> da acesso as <tt>roles</tt> verificando
	 * a anotação @{@link Roles}. <br/>
	 * <br/>
	 * Veja os exemplos em @{@link Roles} para mais explicações 
	 * @param logic a ser verificada.
	 * @param roles a qual deve-se verificar o papael.
	 * @return	<tt>true</tt> caso a lógica não seja anotada com @{@link Roles} ou
	 * 			a anotação libere o acesso para esta <tt>role</tt>.<br/>
	 * 			<tt>false</tt> caso o acesso seja negado.
	 * @see Roles
	 */
	boolean hasAccess(ResourceMethod logic, String ... roles);
	/**
	 * Verifica se a <tt>logic</tt> da acesso as <tt>roles</tt> verificando
	 * a anotação @{@link Roles}. <br/>
	 * <br/>
	 * Veja os exemplos em @{@link Roles} para mais explicações 
	 * @param logic a ser verificada.
	 * @param roles a qual deve-se verificar o papael.
	 * @return	<tt>true</tt> caso a lógica não seja anotada com @{@link Roles} ou
	 * 			a anotação libere o acesso para esta <tt>role</tt>.<br/>
	 * 			<tt>false</tt> caso o acesso seja negado.
	 * @see Roles
	 */
	boolean hasAccess(ResourceMethod logic, Collection<String> roles);
}
